package global

import (
	"strings"
	"sync"
)

const (
	// 输出信息类型
	INFO = iota
	WARN
	ERROR
)

// 信息结构体
type msgStruct struct {
	msgType    int             `name:"信息类型"` // 0: info, 1: warn, 2: error
	msgContent strings.Builder `name:"信息内容"`
	msgCount   int             `name:"信息数量"`
	msgLock    sync.Mutex      `name:"信息锁"`
	msgPrefix  string          `name:"信息前缀"`
	msgSuffix  string          `name:"信息后缀"`
}

// AppendMsg 追加错误信息
func (m *msgStruct) AppendMsg(msg string) {
	if strings.LastIndex(msg, "\n") != len(msg)-1 {
		// 末尾没换行，自动加上
		msg += "\n"
	}
	// msg = "\u001B[41m######" + "\u001B[0m " + "\u001B[31m" + msg + "\u001B[0m"
	msg = m.msgPrefix + msg + m.msgSuffix

	m.msgLock.Lock()
	defer m.msgLock.Unlock()
	m.msgCount++
	m.msgContent.WriteString(msg)
}

// GetMsg 获取错误信息，不影响原数据
func (m *msgStruct) GetMsg() string {
	m.msgLock.Lock()
	res := m.msgContent.String()
	m.msgLock.Unlock()
	return res
}
